
void on_button_salvar_clicked(GtkWidget *widget)
{

Tcadastro *cadastro = {0};
cadastro = malloc(sizeof(Tcadastro) * 1);

strcpy(cadastro->nome , gtk_entry_get_text(GTK_ENTRY(entry_nome)));
strcpy(cadastro->cod , gtk_entry_get_text(GTK_ENTRY(entry_cod)));
strcpy(cadastro->cpf , gtk_entry_get_text(GTK_ENTRY(entry_cpf)));
strcpy(cadastro->identidade ,  gtk_entry_get_text(GTK_ENTRY(entry_identidade)));

strcpy(cadastro->nascimento,gtk_entry_get_text(GTK_ENTRY(entry_dia_nascimento)));
strcat(cadastro->nascimento,"/");
strcat(cadastro->nascimento,gtk_entry_get_text(GTK_ENTRY(entry_mes_nascimento)));
strcat(cadastro->nascimento,"/");
strcat(cadastro->nascimento,gtk_entry_get_text(GTK_ENTRY(entry_ano_nascimento)));

strcpy(cadastro->endereco ,gtk_entry_get_text(GTK_ENTRY(entry_endereco)));
strcpy(cadastro->bairro ,  gtk_entry_get_text(GTK_ENTRY(entry_bairro)));
strcpy(cadastro->cidade ,  gtk_entry_get_text(GTK_ENTRY(entry_cidade)));
strcpy(cadastro->cep , gtk_entry_get_text(GTK_ENTRY(entry_cep)));
strcpy(cadastro->complemento ,  gtk_entry_get_text(GTK_ENTRY(entry_complemento)));
strcpy(cadastro->residencial ,  gtk_entry_get_text(GTK_ENTRY(entry_telefone_res)));
strcpy(cadastro->celular ,   	gtk_entry_get_text(GTK_ENTRY(entry_telefone_cel)));
strcpy(cadastro->outros ,  		gtk_entry_get_text(GTK_ENTRY(entry_telefone_out)));
strcpy(cadastro->observacoes ,  gtk_entry_get_text(GTK_ENTRY(entry_observacoes)));


//verificia se o registro atende a requisitos minimos
if(strlen(cadastro->nome) < 10 || strlen(cadastro->cpf)<11)
{
gtk_widget_show(dlg_registro_inv);
}
else
{
//se o cliente ja existir ele será atualizado
if(strlen(cadastro->cod)!=0)
{
atualizar_registro(cadastro);
registra_alteracao("alteracao de dados no registro",cadastro->cod);
//chama o dialogo de adicionar documentos
gtk_widget_show(dlg_adicionar_doc);
}
else
{
novo_registro(cadastro);
//chama o dialogo de adicionar documentos
gtk_widget_show(dlg_adicionar_doc);

int ultimo;
ultimo = sqlite3_last_insert_rowid(db);
char *cod_buf;
sprintf(cod_buf,"%d",ultimo);
registra_alteracao("inclusao de dados no registro",cod_buf);
free(cod_buf);
}

}
free(cadastro);
} // fim da funcao



void novo_registro(Tcadastro *cadastro)
{
char *init  = "INSERT INTO clientes (nome,cpf,identidade,nascimento,endereco,bairro,cidade,cep,complemento,residencial,celular,outros,observacoes) VALUES(";
char *query = (char *) malloc(sizeof(char) * (strlen(init)+1));

query = strcpy(query,init);
query =  adiciona_valor(query,cadastro->nome);
query =  adiciona_valor(query,cadastro->cpf);
query =  adiciona_valor(query,cadastro->identidade);
query =  adiciona_valor(query,cadastro->nascimento);
query =  adiciona_valor(query,cadastro->endereco);
query =  adiciona_valor(query,cadastro->bairro);
query =  adiciona_valor(query,cadastro->cidade);
query =  adiciona_valor(query,cadastro->cep);
query =  adiciona_valor(query,cadastro->complemento);
query =  adiciona_valor(query,cadastro->residencial);
query =  adiciona_valor(query,cadastro->celular);
query =  adiciona_valor(query,cadastro->outros);
query =  adiciona_valor(query,cadastro->observacoes);

// fechamento da  consulta
query[strlen(query)-2] = '\0';
query = (char *) realloc(query, (strlen(query)+strlen(");")+1) * sizeof(char));
query = strcat(query,");");

// chama a consulta
char *msgErro;
if (sqlite3_exec(db, query, 0, 0, &msgErro) != SQLITE_OK)
{
fprintf(stderr, "Erro: %s\n\n", msgErro);
sqlite3_free(msgErro);
}


free(query);
}


void atualizar_registro(Tcadastro *cadastro)
{
char *init = "UPDATE clientes set nome =";
char *query = (char *) malloc(sizeof(char) * (strlen(init)+1));

query = strcpy(query,init);
query =  adiciona_valor(query,cadastro->nome);
query =  adiciona_valor2(query,"cpf=");
query =  adiciona_valor(query,cadastro->cpf);
query =  adiciona_valor2(query,"identidade=");
query =  adiciona_valor(query,cadastro->identidade);
query =  adiciona_valor2(query,"nascimento=");
query =  adiciona_valor(query,cadastro->nascimento);
query =  adiciona_valor2(query,"endereco=");
query =  adiciona_valor(query,cadastro->endereco);
query =  adiciona_valor2(query,"bairro=");
query =  adiciona_valor(query,cadastro->bairro);
query =  adiciona_valor2(query,"cidade=");
query =  adiciona_valor(query,cadastro->cidade);
query =  adiciona_valor2(query,"cep=");
query =  adiciona_valor(query,cadastro->cep);
query =  adiciona_valor2(query,"complemento=");
query =  adiciona_valor(query,cadastro->complemento);
query =  adiciona_valor2(query,"residencial=");
query =  adiciona_valor(query,cadastro->residencial);
query =  adiciona_valor2(query,"celular=");
query =  adiciona_valor(query,cadastro->celular);
query =  adiciona_valor2(query,"outros=");
query =  adiciona_valor(query,cadastro->outros);
query =  adiciona_valor2(query,"observacoes=");
query =  adiciona_valor(query,cadastro->observacoes);

// fechamento da  consulta
query[strlen(query)-2] = '\0';
query = (char *) realloc(query, (strlen(query)+strlen("where cod=")+1) * sizeof(char));
query = strcat(query,"where cod=");

query = (char *) realloc(query, (strlen(query)+strlen(cadastro->cod)+1) * sizeof(char));
query = strcat(query,cadastro->cod);

// chama a consulta
char *msgErro;
if (sqlite3_exec(db, query, 0, 0, &msgErro) != SQLITE_OK)
{
fprintf(stderr, "Erro: %s\n\n", msgErro);
sqlite3_free(msgErro);
}

free(query);
}







// adiciona valores a query sql
char *adiciona_valor(char *query , char *valor)
{
char *aspas1 = "'";
char *aspas2 = "', ";

query = (char *) realloc(query, (strlen(query)+strlen(aspas1)+1) * sizeof(char));
query = strcat(query,aspas1);

query = (char *) realloc(query, (strlen(query)+strlen(valor)+1) * sizeof(char));
query = strcat(query,valor);

query = (char *) realloc(query, (strlen(query)+strlen(aspas2)+1) * sizeof(char));
query = strcat(query,aspas2);

return(query);
}

// adiciona valores a query sql
char *adiciona_valor2(char *query , char *valor)
{
query = (char *) realloc(query, (strlen(query)+strlen(valor)+1) * sizeof(char));
query = strcat(query,valor);

return(query);
}

